package com.demo.thread.future;

import java.util.concurrent.CompletableFuture;

/**
 * @author : YU.TAN
 * @date : 2021/11/2 14:50
 * supply与supplyAsync
 * 使用supply()时，就表明我们会返回一个结果，并且这个结果可以被后续的任务所使用。
 */
public class CompletableFutureB {
    public static void main(String[] args) throws Exception {

        /**
         * 1、异步任务获取一个async，返回本次执行结果
         */
        CompletableFuture<String> async = CompletableFuture.supplyAsync(() -> {
            /**
             * 业务逻辑。。。
             */
            return "supplyAsync 测试";
        });
        /**
         * 2、thenApply（）接收上一步的结果，并执行任务返回结果
         */
        CompletableFuture<String> thenApply = async.thenApply(result -> {
            /**
             * 业务逻辑。。。
             */
            return "thenApply+" + result;
        });
        /**
         * 3、get()获取执行结果
         */
        String result = thenApply.get();
        System.out.println(result);

        /**
         * 合并写法
         */
        String s = CompletableFuture.supplyAsync(() -> {
            /**
             * 业务逻辑。。。
             */
            return "supplyAsync 测试";
        }).thenApply(resultA -> {
            /**
             * 业务逻辑。。。
             */
            return "thenApply+" + resultA;
        }).get();

        System.out.println(s);

    }
}
